Micron Document
NexusPi Git Node

Node / mirrors / RTNode-HeltecV4 / files / tests / proof_probe_harness.py

Displaying Raw • Download

tests/proof_probe_harness.py 20ec0b4ee3f3e7a8b3c8d00dcdcd5afdcf2bc840 (20ec0b4e) Text, 18.66 KB

T8b949e#!/usr/bin/env python3
T8b949e"""Named scenario harnesses for proof_probe.py transport tests."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72import T7ee787argparse
Tff7b72import T7ee787os
Tff7b72import T7ee787shlex
Tff7b72import T7ee787shutil
Tff7b72import T7ee787subprocess
Tff7b72import T7ee787sys
Tff7b72import T7ee787time
Tff7b72from T7ee787dataclasses Tff7b72import Te6edf3dataclass
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path


Te6edf3PROBE_SCRIPT Tff7b72= Te6edf3PathTb4b4b4(Tff7b72__file__Tb4b4b4)Tff7b72.Td2a8ffwith_nameTb4b4b4(Ta5d6ff"Ta5d6ffproof_probe.pyTa5d6ff"Tb4b4b4)
Te6edf3REPO_ROOT Tff7b72= Te6edf3PROBE_SCRIPTTff7b72.Td2a8ffparentsTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3WORKSPACE_ROOT Tff7b72= Te6edf3REPO_ROOTTff7b72.Td2a8ffparent
Te6edf3DEFAULT_RETICULUM_ROOT Tff7b72= Te6edf3WORKSPACE_ROOT Tff7b72/ Ta5d6ff"Ta5d6ffReticulum-masterTa5d6ff"
Te6edf3DEFAULT_TESTS_DIR Tff7b72= Te6edf3REPO_ROOT Tff7b72/ Ta5d6ff"Ta5d6fftestsTa5d6ff"


Tf0883e@dataclassTb4b4b4(Te6edf3frozenTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72class T56d364ScenarioTb4b4b4:
Te6edf3nameTb4b4b4: Tffa657str
Te6edf3descriptionTb4b4b4: Tffa657str
Te6edf3client_sideTb4b4b4: Tffa657str
Te6edf3server_sideTb4b4b4: Tffa657str
Te6edf3work_dir_nameTb4b4b4: Tffa657str
Te6edf3default_payloadTb4b4b4: Tffa657str


Te6edf3SCENARIOS Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6fflocal-tcp-to-local-tcpTa5d6ff"Tb4b4b4: Te6edf3ScenarioTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6fflocal-tcp-to-local-tcpTa5d6ff"Tb4b4b4,
Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffLocal TCP client to RTNode local TCP server.Ta5d6ff"Tb4b4b4,
Te6edf3client_sideTff7b72=Ta5d6ff"Ta5d6fftcpTa5d6ff"Tb4b4b4,
Te6edf3server_sideTff7b72=Ta5d6ff"Ta5d6fftcpTa5d6ff"Tb4b4b4,
Te6edf3work_dir_nameTff7b72=Ta5d6ff"Ta5d6ffharness_local_tcp_to_local_tcpTa5d6ff"Tb4b4b4,
Te6edf3default_payloadTff7b72=Ta5d6ff"Ta5d6ffharness local tcp to local tcpTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fflora-to-local-tcpTa5d6ff"Tb4b4b4: Te6edf3ScenarioTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6fflora-to-local-tcpTa5d6ff"Tb4b4b4,
Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffLoRa client to RTNode local TCP server.Ta5d6ff"Tb4b4b4,
Te6edf3client_sideTff7b72=Ta5d6ff"Ta5d6ffloraTa5d6ff"Tb4b4b4,
Te6edf3server_sideTff7b72=Ta5d6ff"Ta5d6fftcpTa5d6ff"Tb4b4b4,
Te6edf3work_dir_nameTff7b72=Ta5d6ff"Ta5d6ffharness_lora_to_local_tcpTa5d6ff"Tb4b4b4,
Te6edf3default_payloadTff7b72=Ta5d6ff"Ta5d6ffharness lora to local tcpTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fflocal-tcp-to-wanTa5d6ff"Tb4b4b4: Te6edf3ScenarioTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6fflocal-tcp-to-wanTa5d6ff"Tb4b4b4,
Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffLocal TCP client to RTNode WAN or LoRa server.Ta5d6ff"Tb4b4b4,
Te6edf3client_sideTff7b72=Ta5d6ff"Ta5d6fftcpTa5d6ff"Tb4b4b4,
Te6edf3server_sideTff7b72=Ta5d6ff"Ta5d6ffloraTa5d6ff"Tb4b4b4,
Te6edf3work_dir_nameTff7b72=Ta5d6ff"Ta5d6ffharness_local_tcp_to_wanTa5d6ff"Tb4b4b4,
Te6edf3default_payloadTff7b72=Ta5d6ff"Ta5d6ffharness local tcp to wanTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffwan-to-local-tcpTa5d6ff"Tb4b4b4: Te6edf3ScenarioTb4b4b4(
Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffwan-to-local-tcpTa5d6ff"Tb4b4b4,
Te6edf3descriptionTff7b72=Tb4b4b4(
Ta5d6ff"Ta5d6ffWAN or LoRa client to RTNode local TCP server. Uses a separate work Ta5d6ff"
Ta5d6ff"Ta5d6ffdirectory from lora-to-local-tcp for firewall and boundary tests.Ta5d6ff"
Tb4b4b4)Tb4b4b4,
Te6edf3client_sideTff7b72=Ta5d6ff"Ta5d6ffloraTa5d6ff"Tb4b4b4,
Te6edf3server_sideTff7b72=Ta5d6ff"Ta5d6fftcpTa5d6ff"Tb4b4b4,
Te6edf3work_dir_nameTff7b72=Ta5d6ff"Ta5d6ffharness_wan_to_local_tcpTa5d6ff"Tb4b4b4,
Te6edf3default_payloadTff7b72=Ta5d6ff"Ta5d6ffharness wan to local tcpTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4}

Te6edf3SCENARIO_SEQUENCE Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6fflocal-tcp-to-local-tcpTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflora-to-local-tcpTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflocal-tcp-to-wanTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffwan-to-local-tcpTa5d6ff"Tb4b4b4,
Tb4b4b4]


Tff7b72def Td2a8ffquotedTb4b4b4(Te6edf3commandTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3shlexTff7b72.Td2a8ffquoteTb4b4b4(Te6edf3partTb4b4b4) Tff7b72for Te6edf3part Tff7b72in Te6edf3commandTb4b4b4)


Tff7b72def Td2a8ffscenario_work_dirTb4b4b4(Te6edf3nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Te6edf3PathTb4b4b4:
Tff7b72return Te6edf3DEFAULT_TESTS_DIR Tff7b72/ Te6edf3SCENARIOSTb4b4b4[Te6edf3nameTb4b4b4]Tff7b72.Td2a8ffwork_dir_name


Tff7b72def Td2a8ffadd_common_runtime_argumentsTb4b4b4(Te6edf3parserTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--reticulum-rootTa5d6ff"Tb4b4b4,
Tffa657typeTff7b72=Te6edf3PathTb4b4b4,
Te6edf3defaultTff7b72=Te6edf3DEFAULT_RETICULUM_ROOTTb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffPath to the Reticulum source tree used for PYTHONPATH.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--work-dirTa5d6ff"Tb4b4b4,
Tffa657typeTff7b72=Te6edf3PathTb4b4b4,
Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffOverride the scenario work directory.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--pythonTa5d6ff"Tb4b4b4,
Te6edf3defaultTff7b72=Te6edf3sysTff7b72.Td2a8ffexecutableTb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffPython interpreter used to launch proof_probe.py.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--dry-runTa5d6ff"Tb4b4b4,
Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffPrint the command instead of running it.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--debugTa5d6ff"Tb4b4b4,
Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffPass through proof_probe.py debug logging.Ta5d6ff"Tb4b4b4,
Tb4b4b4)


Tff7b72def Td2a8ffadd_radio_argumentsTb4b4b4(Te6edf3parserTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--rnode-portTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Ta5d6ff"Ta5d6ff/dev/cu.usbmodem114401Ta5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--frequencyTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657intTb4b4b4, Te6edf3defaultTff7b72=T79c0ff914875000Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--bandwidthTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657intTb4b4b4, Te6edf3defaultTff7b72=T79c0ff125000Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--spreadingfactorTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657intTb4b4b4, Te6edf3defaultTff7b72=T79c0ff10Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--codingrateTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657intTb4b4b4, Te6edf3defaultTff7b72=T79c0ff5Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--txpowerTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657intTb4b4b4, Te6edf3defaultTff7b72=T79c0ff14Tb4b4b4)


Tff7b72def Td2a8ffadd_tcp_argumentsTb4b4b4(Te6edf3parserTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--tcp-hostTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Ta5d6ff"Ta5d6ffmynode.localTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--tcp-portTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657intTb4b4b4, Te6edf3defaultTff7b72=T79c0ff4242Tb4b4b4)


Tff7b72def Td2a8ffadd_server_argumentsTb4b4b4(Te6edf3parserTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ffscenarioTa5d6ff"Tb4b4b4, Te6edf3choicesTff7b72=Tffa657sortedTb4b4b4(Te6edf3SCENARIOSTb4b4b4)Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--durationTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff120Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--announce-intervalTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff15Tb4b4b4)
Te6edf3add_common_runtime_argumentsTb4b4b4(Te6edf3parserTb4b4b4)
Te6edf3add_tcp_argumentsTb4b4b4(Te6edf3parserTb4b4b4)
Te6edf3add_radio_argumentsTb4b4b4(Te6edf3parserTb4b4b4)


Tff7b72def Td2a8ffadd_client_argumentsTb4b4b4(Te6edf3parserTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ffscenarioTa5d6ff"Tb4b4b4, Te6edf3choicesTff7b72=Tffa657sortedTb4b4b4(Te6edf3SCENARIOSTb4b4b4)Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--path-timeoutTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff60Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--timeoutTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff45Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--payloadTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--targetTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4)
Te6edf3add_common_runtime_argumentsTb4b4b4(Te6edf3parserTb4b4b4)
Te6edf3add_tcp_argumentsTb4b4b4(Te6edf3parserTb4b4b4)
Te6edf3add_radio_argumentsTb4b4b4(Te6edf3parserTb4b4b4)


Tff7b72def Td2a8ffadd_orchestrator_argumentsTb4b4b4(Te6edf3parserTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4, Te6edf3include_scenarioTb4b4b4: Tffa657boolTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3include_scenarioTb4b4b4:
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ffscenarioTa5d6ff"Tb4b4b4, Te6edf3choicesTff7b72=Tffa657sortedTb4b4b4(Te6edf3SCENARIOSTb4b4b4)Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--durationTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff120Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--announce-intervalTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff15Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--path-timeoutTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff60Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--timeoutTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff45Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--payloadTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--targetTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--server-ready-timeoutTa5d6ff"Tb4b4b4,
Tffa657typeTff7b72=Tffa657floatTb4b4b4,
Te6edf3defaultTff7b72=T79c0ff30Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffMaximum time to wait for the server hash file before starting the client.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--settle-secondsTa5d6ff"Tb4b4b4,
Tffa657typeTff7b72=Tffa657floatTb4b4b4,
Te6edf3defaultTff7b72=T79c0ff2.0Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffExtra delay after server readiness before the client starts.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(
Ta5d6ff"Ta5d6ff--keep-stateTa5d6ff"Tb4b4b4,
Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4,
Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffKeep old config and hash files in the scenario work directory.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3add_common_runtime_argumentsTb4b4b4(Te6edf3parserTb4b4b4)
Te6edf3add_tcp_argumentsTb4b4b4(Te6edf3parserTb4b4b4)
Te6edf3add_radio_argumentsTb4b4b4(Te6edf3parserTb4b4b4)


Tff7b72def Td2a8ffbuild_base_commandTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4, Te6edf3roleTb4b4b4: Tffa657strTb4b4b4, Te6edf3sideTb4b4b4: Tffa657strTb4b4b4, Te6edf3work_dirTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3command Tff7b72= Tb4b4b4[
Te6edf3argsTff7b72.Td2a8ffpythonTb4b4b4,
Tffa657strTb4b4b4(Te6edf3PROBE_SCRIPTTb4b4b4)Tb4b4b4,
Te6edf3roleTb4b4b4,
Ta5d6ff"Ta5d6ff--sideTa5d6ff"Tb4b4b4,
Te6edf3sideTb4b4b4,
Ta5d6ff"Ta5d6ff--work-dirTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3work_dirTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff--hash-fileTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3work_dir Tff7b72/ Ta5d6ff"Ta5d6ffserver_hash.txtTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4]

Tff7b72if Te6edf3side Tff7b72== Ta5d6ff"Ta5d6fftcpTa5d6ff"Tb4b4b4:
Te6edf3command Tff7b72+Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ff--tcp-hostTa5d6ff"Tb4b4b4, Te6edf3argsTff7b72.Td2a8fftcp_hostTb4b4b4, Ta5d6ff"Ta5d6ff--tcp-portTa5d6ff"Tb4b4b4, Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8fftcp_portTb4b4b4)Tb4b4b4]
Tff7b72elif Te6edf3side Tff7b72== Ta5d6ff"Ta5d6ffloraTa5d6ff"Tb4b4b4:
Te6edf3command Tff7b72+Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6ff--rnode-portTa5d6ff"Tb4b4b4,
Te6edf3argsTff7b72.Td2a8ffrnode_portTb4b4b4,
Ta5d6ff"Ta5d6ff--frequencyTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8fffrequencyTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff--bandwidthTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8ffbandwidthTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff--spreadingfactorTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8ffspreadingfactorTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff--codingrateTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8ffcodingrateTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff--txpowerTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8fftxpowerTb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUnsupported side: Tffd700{Te6edf3sideTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72if Te6edf3argsTff7b72.Td2a8ffdebugTb4b4b4:
Te6edf3commandTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ff--debugTa5d6ff"Tb4b4b4)

Tff7b72return Te6edf3command


Tff7b72def Td2a8ffbuild_server_commandTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3scenario Tff7b72= Te6edf3SCENARIOSTb4b4b4[Te6edf3argsTff7b72.Td2a8ffscenarioTb4b4b4]
Te6edf3work_dir Tff7b72= Te6edf3argsTff7b72.Td2a8ffwork_dir Tff7b72or Te6edf3scenario_work_dirTb4b4b4(Te6edf3argsTff7b72.Td2a8ffscenarioTb4b4b4)
Te6edf3command Tff7b72= Te6edf3build_base_commandTb4b4b4(Te6edf3argsTb4b4b4, Ta5d6ff"Ta5d6ffserverTa5d6ff"Tb4b4b4, Te6edf3scenarioTff7b72.Td2a8ffserver_sideTb4b4b4, Te6edf3work_dirTb4b4b4)
Te6edf3command Tff7b72+Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6ff--durationTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8ffdurationTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff--announce-intervalTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8ffannounce_intervalTb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72return Te6edf3command


Tff7b72def Td2a8ffbuild_client_commandTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3scenario Tff7b72= Te6edf3SCENARIOSTb4b4b4[Te6edf3argsTff7b72.Td2a8ffscenarioTb4b4b4]
Te6edf3work_dir Tff7b72= Te6edf3argsTff7b72.Td2a8ffwork_dir Tff7b72or Te6edf3scenario_work_dirTb4b4b4(Te6edf3argsTff7b72.Td2a8ffscenarioTb4b4b4)
Te6edf3command Tff7b72= Te6edf3build_base_commandTb4b4b4(Te6edf3argsTb4b4b4, Ta5d6ff"Ta5d6ffclientTa5d6ff"Tb4b4b4, Te6edf3scenarioTff7b72.Td2a8ffclient_sideTb4b4b4, Te6edf3work_dirTb4b4b4)
Te6edf3command Tff7b72+Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6ff--path-timeoutTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8ffpath_timeoutTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff--timeoutTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3argsTff7b72.Td2a8fftimeoutTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff--payloadTa5d6ff"Tb4b4b4,
Te6edf3argsTff7b72.Td2a8ffpayload Tff7b72or Te6edf3scenarioTff7b72.Td2a8ffdefault_payloadTb4b4b4,
Tb4b4b4]
Tff7b72if Te6edf3argsTff7b72.Td2a8fftargetTb4b4b4:
Te6edf3command Tff7b72+Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ff--targetTa5d6ff"Tb4b4b4, Te6edf3argsTff7b72.Td2a8fftargetTb4b4b4]
Tff7b72return Te6edf3command


Tff7b72def Td2a8ffrun_with_environmentTb4b4b4(Te6edf3commandTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4, Te6edf3reticulum_rootTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3dry_runTb4b4b4: Tffa657boolTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3env Tff7b72= Te6edf3build_environmentTb4b4b4(Te6edf3reticulum_rootTb4b4b4)

Tffa657printTb4b4b4(Te6edf3quotedTb4b4b4(Te6edf3commandTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3dry_runTb4b4b4:
Tff7b72return T79c0ff0

Te6edf3completed Tff7b72= Te6edf3subprocessTff7b72.Td2a8ffrunTb4b4b4(Te6edf3commandTb4b4b4, Te6edf3envTff7b72=Te6edf3envTb4b4b4)
Tff7b72return Te6edf3completedTff7b72.Td2a8ffreturncode


Tff7b72def Td2a8ffbuild_environmentTb4b4b4(Te6edf3reticulum_rootTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3env Tff7b72= Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)
Te6edf3existing_pythonpath Tff7b72= Te6edf3envTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffPYTHONPATHTa5d6ff"Tb4b4b4)
Te6edf3reticulum_entry Tff7b72= Tffa657strTb4b4b4(Te6edf3reticulum_rootTb4b4b4)
Tff7b72if Te6edf3existing_pythonpathTb4b4b4:
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffPYTHONPATHTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6fffTa5d6ff"Tffd700{Te6edf3reticulum_entryTffd700}Tffd700{Te6edf3osTff7b72.Td2a8ffpathsepTffd700}Tffd700{Te6edf3existing_pythonpathTffd700}Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffPYTHONPATHTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3reticulum_entry
Tff7b72return Te6edf3env


Tff7b72def Td2a8ffclean_runtime_stateTb4b4b4(Te6edf3work_dirTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3child Tff7b72in Te6edf3work_dirTff7b72.Td2a8ffiterdirTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3work_dirTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4) Tff7b72else Tb4b4b4[Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3childTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4) Tff7b72and Te6edf3childTff7b72.Td2a8ffnameTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffconfig_Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72elif Te6edf3childTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4) Tff7b72and Te6edf3childTff7b72.Td2a8ffname Tff7b72== Ta5d6ff"Ta5d6ffserver_hash.txtTa5d6ff"Tb4b4b4:
Te6edf3childTff7b72.Td2a8ffunlinkTb4b4b4(Tb4b4b4)


Tff7b72def Td2a8fflog_pathTb4b4b4(Te6edf3work_dirTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3scenario_nameTb4b4b4: Tffa657strTb4b4b4, Te6edf3roleTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Te6edf3PathTb4b4b4:
Te6edf3safe_name Tff7b72= Te6edf3scenario_nameTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff-Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3work_dir Tff7b72/ Ta5d6fffTa5d6ff"Ta5d6fforchestrator_Tffd700{Te6edf3safe_nameTffd700}Ta5d6ff_Tffd700{Te6edf3roleTffd700}Ta5d6ff.logTa5d6ff"


Tff7b72def Td2a8ffappend_headerTb4b4b4(Te6edf3log_fileTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3titleTb4b4b4: Tffa657strTb4b4b4, Te6edf3commandTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3log_fileTff7b72.Td2a8ffparentTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Te6edf3log_fileTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[Tffd700{Te6edf3titleTffd700}Ta5d6ff]Tffea00\nTa5d6ff"Tb4b4b4)
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffcommand: Tffd700{Te6edf3quotedTb4b4b4(Te6edf3commandTb4b4b4)Tffd700}Tffea00\nTffea00\nTa5d6ff"Tb4b4b4)


Tff7b72def Td2a8ffappend_outputTb4b4b4(Te6edf3log_fileTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3textTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Te6edf3log_fileTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffaTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72if Te6edf3text Tff7b72and Tff7b72not Te6edf3textTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)


Tff7b72def Td2a8fftail_linesTb4b4b4(Te6edf3log_fileTb4b4b4: Te6edf3PathTb4b4b4, Te6edf3countTb4b4b4: Tffa657int Tff7b72= T79c0ff20Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3log_fileTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Te6edf3lines Tff7b72= Te6edf3log_fileTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffsplitlinesTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3linesTb4b4b4[Tff7b72-Te6edf3countTb4b4b4:Tb4b4b4]


Tff7b72def Td2a8ffextract_signal_linesTb4b4b4(Te6edf3log_fileTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3log_fileTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Te6edf3interesting Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffSERVER_READYTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffSERVER_RXTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffSERVER_DONETa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffCLIENT_PATH_READYTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffCLIENT_SENTTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffCLIENT_DELIVEREDTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffCLIENT_TIMEOUTTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffCLIENT_FAILTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3lines Tff7b72= Te6edf3log_fileTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffsplitlinesTb4b4b4(Tb4b4b4)
Tff7b72return Tb4b4b4[Te6edf3line Tff7b72for Te6edf3line Tff7b72in Te6edf3lines Tff7b72if Tffa657anyTb4b4b4(Te6edf3token Tff7b72in Te6edf3line Tff7b72for Te6edf3token Tff7b72in Te6edf3interestingTb4b4b4)Tb4b4b4]


Tff7b72def Td2a8ffwait_for_server_readyTb4b4b4(
Te6edf3server_processTb4b4b4: Te6edf3subprocessTff7b72.Td2a8ffPopenTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4,
Te6edf3hash_fileTb4b4b4: Te6edf3PathTb4b4b4,
Te6edf3timeout_secondsTb4b4b4: Tffa657floatTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657boolTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4:
Te6edf3deadline Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3timeout_seconds
Tff7b72while Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3deadlineTb4b4b4:
Tff7b72if Te6edf3server_processTff7b72.Td2a8ffpollTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72FalseTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffserver exited with code Tffd700{Te6edf3server_processTff7b72.Td2a8ffreturncodeTffd700}Ta5d6ff before readinessTa5d6ff"
Tff7b72if Te6edf3hash_fileTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4) Tff7b72and Te6edf3hash_fileTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72TrueTb4b4b4, Ta5d6ff"Ta5d6ffhash file readyTa5d6ff"
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.25Tb4b4b4)
Tff7b72return Tff7b72FalseTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffserver hash file not created within Tffd700{Te6edf3timeout_secondsTffd700}Ta5d6ffsTa5d6ff"


Tff7b72def Td2a8ffstop_serverTb4b4b4(Te6edf3server_processTb4b4b4: Te6edf3subprocessTff7b72.Td2a8ffPopenTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3server_processTff7b72.Td2a8ffpollTb4b4b4(Tb4b4b4) Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return
Te6edf3server_processTff7b72.Td2a8ffterminateTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3server_processTff7b72.Td2a8ffwaitTb4b4b4(Te6edf3timeoutTff7b72=T79c0ff10Tb4b4b4)
Tff7b72except Te6edf3subprocessTff7b72.Td2a8ffTimeoutExpiredTb4b4b4:
Te6edf3server_processTff7b72.Td2a8ffkillTb4b4b4(Tb4b4b4)
Te6edf3server_processTff7b72.Td2a8ffwaitTb4b4b4(Te6edf3timeoutTff7b72=T79c0ff10Tb4b4b4)


Tff7b72def Td2a8ffrun_scenarioTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4, Te6edf3scenario_nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3scenario Tff7b72= Te6edf3SCENARIOSTb4b4b4[Te6edf3scenario_nameTb4b4b4]
Te6edf3work_dir Tff7b72= Te6edf3argsTff7b72.Td2a8ffwork_dir Tff7b72or Te6edf3scenario_work_dirTb4b4b4(Te6edf3scenario_nameTb4b4b4)
Te6edf3hash_file Tff7b72= Te6edf3work_dir Tff7b72/ Ta5d6ff"Ta5d6ffserver_hash.txtTa5d6ff"
Te6edf3server_log Tff7b72= Te6edf3log_pathTb4b4b4(Te6edf3work_dirTb4b4b4, Te6edf3scenario_nameTb4b4b4, Ta5d6ff"Ta5d6ffserverTa5d6ff"Tb4b4b4)
Te6edf3client_log Tff7b72= Te6edf3log_pathTb4b4b4(Te6edf3work_dirTb4b4b4, Te6edf3scenario_nameTb4b4b4, Ta5d6ff"Ta5d6ffclientTa5d6ff"Tb4b4b4)
Te6edf3env Tff7b72= Te6edf3build_environmentTb4b4b4(Te6edf3argsTff7b72.Td2a8ffreticulum_rootTb4b4b4)

Tff7b72if Tff7b72not Te6edf3argsTff7b72.Td2a8ffkeep_stateTb4b4b4:
Te6edf3clean_runtime_stateTb4b4b4(Te6edf3work_dirTb4b4b4)
Te6edf3work_dirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)

Te6edf3scenario_args Tff7b72= Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4(Tff7b72*Tff7b72*Tffa657varsTb4b4b4(Te6edf3argsTb4b4b4)Tb4b4b4)
Te6edf3scenario_argsTff7b72.Td2a8ffscenario Tff7b72= Te6edf3scenario_name
Te6edf3server_command Tff7b72= Te6edf3build_server_commandTb4b4b4(Te6edf3scenario_argsTb4b4b4)
Te6edf3client_command Tff7b72= Te6edf3build_client_commandTb4b4b4(Te6edf3scenario_argsTb4b4b4)

Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff== Tffd700{Te6edf3scenario_nameTffd700}Ta5d6ff ==Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffserver log: Tffd700{Te6edf3server_logTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffclient log: Tffd700{Te6edf3client_logTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72if Te6edf3argsTff7b72.Td2a8ffdry_runTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffServer command:Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Te6edf3quotedTb4b4b4(Te6edf3server_commandTb4b4b4)Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffClient command:Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Te6edf3quotedTb4b4b4(Te6edf3client_commandTb4b4b4)Tb4b4b4)
Tff7b72return T79c0ff0

Te6edf3append_headerTb4b4b4(Te6edf3server_logTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffserver Tffd700{Te6edf3scenario_nameTffd700}Ta5d6ff"Tb4b4b4, Te6edf3server_commandTb4b4b4)
Te6edf3append_headerTb4b4b4(Te6edf3client_logTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffclient Tffd700{Te6edf3scenario_nameTffd700}Ta5d6ff"Tb4b4b4, Te6edf3client_commandTb4b4b4)

Tff7b72with Te6edf3server_logTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffaTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3server_handleTb4b4b4:
Te6edf3server_process Tff7b72= Te6edf3subprocessTff7b72.Td2a8ffPopenTb4b4b4(
Te6edf3server_commandTb4b4b4,
Te6edf3envTff7b72=Te6edf3envTb4b4b4,
Te6edf3stdoutTff7b72=Te6edf3server_handleTb4b4b4,
Te6edf3stderrTff7b72=Te6edf3subprocessTff7b72.Td2a8ffSTDOUTTb4b4b4,
Te6edf3textTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3cwdTff7b72=Tffa657strTb4b4b4(Te6edf3REPO_ROOTTb4b4b4)Tb4b4b4,
Tb4b4b4)

Tff7b72tryTb4b4b4:
Te6edf3readyTb4b4b4, Te6edf3reason Tff7b72= Te6edf3wait_for_server_readyTb4b4b4(Te6edf3server_processTb4b4b4, Te6edf3hash_fileTb4b4b4, Te6edf3argsTff7b72.Td2a8ffserver_ready_timeoutTb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffserver readiness: Tffd700{Te6edf3reasonTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3readyTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffserver tail:Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3line Tff7b72in Te6edf3tail_linesTb4b4b4(Te6edf3server_logTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72return T79c0ff90

Tff7b72if Te6edf3argsTff7b72.Td2a8ffsettle_seconds Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3argsTff7b72.Td2a8ffsettle_secondsTb4b4b4)

Te6edf3client_result Tff7b72= Te6edf3subprocessTff7b72.Td2a8ffrunTb4b4b4(
Te6edf3client_commandTb4b4b4,
Te6edf3envTff7b72=Te6edf3envTb4b4b4,
Te6edf3capture_outputTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3textTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3cwdTff7b72=Tffa657strTb4b4b4(Te6edf3REPO_ROOTTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3append_outputTb4b4b4(Te6edf3client_logTb4b4b4, Te6edf3client_resultTff7b72.Td2a8ffstdoutTb4b4b4)
Te6edf3append_outputTb4b4b4(Te6edf3client_logTb4b4b4, Te6edf3client_resultTff7b72.Td2a8ffstderrTb4b4b4)

Te6edf3signal_lines Tff7b72= Te6edf3extract_signal_linesTb4b4b4(Te6edf3client_logTb4b4b4)
Tff7b72if Te6edf3signal_linesTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffclient signals:Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3line Tff7b72in Te6edf3signal_linesTb4b4b4:
Tffa657printTb4b4b4(Te6edf3lineTb4b4b4)

Te6edf3server_signals Tff7b72= Te6edf3extract_signal_linesTb4b4b4(Te6edf3server_logTb4b4b4)
Tff7b72if Te6edf3server_signalsTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffserver signals:Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3line Tff7b72in Te6edf3server_signalsTb4b4b4[Tff7b72-T79c0ff6Tb4b4b4:Tb4b4b4]Tb4b4b4:
Tffa657printTb4b4b4(Te6edf3lineTb4b4b4)

Tff7b72if Te6edf3client_resultTff7b72.Td2a8ffreturncode Tff7b72!= T79c0ff0Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffclient failed with exit code Tffd700{Te6edf3client_resultTff7b72.Td2a8ffreturncodeTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffclient tail:Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3line Tff7b72in Te6edf3tail_linesTb4b4b4(Te6edf3client_logTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Te6edf3lineTb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffserver tail:Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3line Tff7b72in Te6edf3tail_linesTb4b4b4(Te6edf3server_logTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Te6edf3lineTb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffscenario passed with client exit code Tffd700{Te6edf3client_resultTff7b72.Td2a8ffreturncodeTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72return Te6edf3client_resultTff7b72.Td2a8ffreturncode
Tff7b72finallyTb4b4b4:
Te6edf3stop_serverTb4b4b4(Te6edf3server_processTb4b4b4)


Tff7b72def Td2a8ffcommand_listTb4b4b4(Te6edf3_argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Tff7b72for Te6edf3scenario Tff7b72in Te6edf3SCENARIOSTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3scenarioTff7b72.Td2a8ffnameTffd700}Ta5d6ff: Tffd700{Te6edf3scenarioTff7b72.Td2a8ffdescriptionTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff server side: Tffd700{Te6edf3scenarioTff7b72.Td2a8ffserver_sideTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff client side: Tffd700{Te6edf3scenarioTff7b72.Td2a8ffclient_sideTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff default work dir: Tffd700{Te6edf3scenario_work_dirTb4b4b4(Te6edf3scenarioTff7b72.Td2a8ffnameTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return T79c0ff0


Tff7b72def Td2a8ffcommand_showTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3scenario Tff7b72= Te6edf3SCENARIOSTb4b4b4[Te6edf3argsTff7b72.Td2a8ffscenarioTb4b4b4]
Te6edf3work_dir Tff7b72= Te6edf3argsTff7b72.Td2a8ffwork_dir Tff7b72or Te6edf3scenario_work_dirTb4b4b4(Te6edf3argsTff7b72.Td2a8ffscenarioTb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffScenario: Tffd700{Te6edf3scenarioTff7b72.Td2a8ffnameTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Te6edf3scenarioTff7b72.Td2a8ffdescriptionTb4b4b4)
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffWork dir: Tffd700{Te6edf3work_dirTffd700}Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffServer command:Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Te6edf3quotedTb4b4b4(Te6edf3build_server_commandTb4b4b4(Te6edf3argsTb4b4b4)Tb4b4b4)Tb4b4b4)
Tffa657printTb4b4b4(Tb4b4b4)
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffClient command:Ta5d6ff"Tb4b4b4)
Tffa657printTb4b4b4(Te6edf3quotedTb4b4b4(Te6edf3build_client_commandTb4b4b4(Te6edf3argsTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72return T79c0ff0


Tff7b72def Td2a8ffcommand_serverTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Tff7b72if Tff7b72not Te6edf3argsTff7b72.Td2a8ffreticulum_rootTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReticulum root does not exist: Tffd700{Te6edf3argsTff7b72.Td2a8ffreticulum_rootTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3run_with_environmentTb4b4b4(Te6edf3build_server_commandTb4b4b4(Te6edf3argsTb4b4b4)Tb4b4b4, Te6edf3argsTff7b72.Td2a8ffreticulum_rootTb4b4b4, Te6edf3argsTff7b72.Td2a8ffdry_runTb4b4b4)


Tff7b72def Td2a8ffcommand_clientTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Tff7b72if Tff7b72not Te6edf3argsTff7b72.Td2a8ffreticulum_rootTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReticulum root does not exist: Tffd700{Te6edf3argsTff7b72.Td2a8ffreticulum_rootTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3run_with_environmentTb4b4b4(Te6edf3build_client_commandTb4b4b4(Te6edf3argsTb4b4b4)Tb4b4b4, Te6edf3argsTff7b72.Td2a8ffreticulum_rootTb4b4b4, Te6edf3argsTff7b72.Td2a8ffdry_runTb4b4b4)


Tff7b72def Td2a8ffcommand_runTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Tff7b72if Tff7b72not Te6edf3argsTff7b72.Td2a8ffreticulum_rootTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReticulum root does not exist: Tffd700{Te6edf3argsTff7b72.Td2a8ffreticulum_rootTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3run_scenarioTb4b4b4(Te6edf3argsTb4b4b4, Te6edf3argsTff7b72.Td2a8ffscenarioTb4b4b4)


Tff7b72def Td2a8ffcommand_run_allTb4b4b4(Te6edf3argsTb4b4b4: Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Tff7b72if Tff7b72not Te6edf3argsTff7b72.Td2a8ffreticulum_rootTff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReticulum root does not exist: Tffd700{Te6edf3argsTff7b72.Td2a8ffreticulum_rootTffd700}Ta5d6ff"Tb4b4b4)

Te6edf3resultsTb4b4b4: Tffa657listTb4b4b4[Tffa657tupleTb4b4b4[Tffa657strTb4b4b4, Tffa657intTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3scenario_name Tff7b72in Te6edf3SCENARIO_SEQUENCETb4b4b4:
Te6edf3scenario_args Tff7b72= Te6edf3argparseTff7b72.Td2a8ffNamespaceTb4b4b4(Tff7b72*Tff7b72*Tffa657varsTb4b4b4(Te6edf3argsTb4b4b4)Tb4b4b4)
Te6edf3scenario_argsTff7b72.Td2a8ffwork_dir Tff7b72= Tff7b72None
Te6edf3result Tff7b72= Te6edf3run_scenarioTb4b4b4(Te6edf3scenario_argsTb4b4b4, Te6edf3scenario_nameTb4b4b4)
Te6edf3resultsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4(Te6edf3scenario_nameTb4b4b4, Te6edf3resultTb4b4b4)Tb4b4b4)

Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff== summary ==Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3scenario_nameTb4b4b4, Te6edf3result Tff7b72in Te6edf3resultsTb4b4b4:
Te6edf3status Tff7b72= Ta5d6ff"Ta5d6ffPASSTa5d6ff" Tff7b72if Te6edf3result Tff7b72== T79c0ff0 Tff7b72else Ta5d6fffTa5d6ff"Ta5d6ffFAIL (Tffd700{Te6edf3resultTffd700}Ta5d6ff)Ta5d6ff"
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Tffd700{Te6edf3scenario_nameTffd700}Ta5d6ff: Tffd700{Te6edf3statusTffd700}Ta5d6ff"Tb4b4b4)

Tff7b72return T79c0ff0 Tff7b72if Tffa657allTb4b4b4(Te6edf3result Tff7b72== T79c0ff0 Tff7b72for Te6edf3_Tb4b4b4, Te6edf3result Tff7b72in Te6edf3resultsTb4b4b4) Tff7b72else T79c0ff1


Tff7b72def Td2a8ffbuild_parserTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4:
Te6edf3parser Tff7b72= Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4(Te6edf3descriptionTff7b72=Tff7b72__doc__Tb4b4b4)
Te6edf3subparsers Tff7b72= Te6edf3parserTff7b72.Td2a8ffadd_subparsersTb4b4b4(Te6edf3destTff7b72=Ta5d6ff"Ta5d6ffcommandTa5d6ff"Tb4b4b4, Te6edf3requiredTff7b72=Tff7b72TrueTb4b4b4)

Te6edf3list_parser Tff7b72= Te6edf3subparsersTff7b72.Td2a8ffadd_parserTb4b4b4(Ta5d6ff"Ta5d6fflistTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffList the named proof-probe scenarios.Ta5d6ff"Tb4b4b4)
Te6edf3list_parserTff7b72.Td2a8ffset_defaultsTb4b4b4(Te6edf3funcTff7b72=Te6edf3command_listTb4b4b4)

Te6edf3show_parser Tff7b72= Te6edf3subparsersTff7b72.Td2a8ffadd_parserTb4b4b4(Ta5d6ff"Ta5d6ffshowTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffPrint the server and client commands for a scenario.Ta5d6ff"Tb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ffscenarioTa5d6ff"Tb4b4b4, Te6edf3choicesTff7b72=Tffa657sortedTb4b4b4(Te6edf3SCENARIOSTb4b4b4)Tb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--work-dirTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Te6edf3PathTb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--durationTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff120Tb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--announce-intervalTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff15Tb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--path-timeoutTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff60Tb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--timeoutTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657floatTb4b4b4, Te6edf3defaultTff7b72=T79c0ff45Tb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--payloadTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--targetTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--pythonTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Te6edf3sysTff7b72.Td2a8ffexecutableTb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--debugTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstore_trueTa5d6ff"Tb4b4b4)
Te6edf3add_tcp_argumentsTb4b4b4(Te6edf3show_parserTb4b4b4)
Te6edf3add_radio_argumentsTb4b4b4(Te6edf3show_parserTb4b4b4)
Te6edf3show_parserTff7b72.Td2a8ffset_defaultsTb4b4b4(Te6edf3funcTff7b72=Te6edf3command_showTb4b4b4)

Te6edf3server_parser Tff7b72= Te6edf3subparsersTff7b72.Td2a8ffadd_parserTb4b4b4(Ta5d6ff"Ta5d6ffserverTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffRun or print the server side of a scenario.Ta5d6ff"Tb4b4b4)
Te6edf3add_server_argumentsTb4b4b4(Te6edf3server_parserTb4b4b4)
Te6edf3server_parserTff7b72.Td2a8ffset_defaultsTb4b4b4(Te6edf3funcTff7b72=Te6edf3command_serverTb4b4b4)

Te6edf3client_parser Tff7b72= Te6edf3subparsersTff7b72.Td2a8ffadd_parserTb4b4b4(Ta5d6ff"Ta5d6ffclientTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffRun or print the client side of a scenario.Ta5d6ff"Tb4b4b4)
Te6edf3add_client_argumentsTb4b4b4(Te6edf3client_parserTb4b4b4)
Te6edf3client_parserTff7b72.Td2a8ffset_defaultsTb4b4b4(Te6edf3funcTff7b72=Te6edf3command_clientTb4b4b4)

Te6edf3run_parser Tff7b72= Te6edf3subparsersTff7b72.Td2a8ffadd_parserTb4b4b4(Ta5d6ff"Ta5d6ffrunTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffRun a full scenario: start server, then run client, then stop server.Ta5d6ff"Tb4b4b4)
Te6edf3add_orchestrator_argumentsTb4b4b4(Te6edf3run_parserTb4b4b4, Te6edf3include_scenarioTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3run_parserTff7b72.Td2a8ffset_defaultsTb4b4b4(Te6edf3funcTff7b72=Te6edf3command_runTb4b4b4)

Te6edf3run_all_parser Tff7b72= Te6edf3subparsersTff7b72.Td2a8ffadd_parserTb4b4b4(Ta5d6ff"Ta5d6ffrun-allTa5d6ff"Tb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffRun all four named scenarios sequentially.Ta5d6ff"Tb4b4b4)
Te6edf3add_orchestrator_argumentsTb4b4b4(Te6edf3run_all_parserTb4b4b4, Te6edf3include_scenarioTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3run_all_parserTff7b72.Td2a8ffset_defaultsTb4b4b4(Te6edf3funcTff7b72=Te6edf3command_run_allTb4b4b4)

Tff7b72return Te6edf3parser


Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Te6edf3parser Tff7b72= Te6edf3build_parserTb4b4b4(Tb4b4b4)
Te6edf3args Tff7b72= Te6edf3parserTff7b72.Td2a8ffparse_argsTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3argsTff7b72.Td2a8fffuncTb4b4b4(Te6edf3argsTb4b4b4)


Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Tff7b72raise Tf85149SystemExitTb4b4b4(Te6edf3mainTb4b4b4(Tb4b4b4)Tb4b4b4)

Served by rngit 1.4.2 - Generated in 0.07s